package com.mercury.pattern._01_singleton.lazy.type04;

/**
 * 懒汉式4：线程安全-静态内部类方式
 */
public class SingletonTest04 {
    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance == instance2);
        System.out.println(instance.hashCode());
        System.out.println(instance2.hashCode());
    }
}

class Singleton{

    /**
     * 1、静态内部类一开始不会装载
     * 2、线程安全（虚拟机会保证一个类的构造器<clinit>()方法在多线程环境中被正确地加载，同步，如果多个线程同时去初始化一个类，那么只有一个线程去执行这个类的
     *  构造器<clinit>()方法，其他线程都需要阻塞等待，直到活动线程执行<clinit>（）方法完毕）
     */
    private static class SingleInner{
        private static final Singleton instance = new Singleton();
    }

    public static Singleton getInstance(){
        return SingleInner.instance;
    }
}
